{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "866dbd08-5d50-489e-963c-cff36390d449",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.path import Path\n",
    "import matplotlib.patches as patches\n",
    "\n",
    "def draw_array(ax, a, top_label = None, bottom_label = None, height=1, y=0, scale=1):\n",
    "    pos_x = lambda n: n * scale\n",
    "    pos_y = lambda n: (n + y) * scale\n",
    "    pos = lambda X,Y: (pos_x(X), pos_y(Y))\n",
    "    \n",
    "    x = len(a)\n",
    "    verts = [\n",
    "        # border\n",
    "        pos(0., 0),\n",
    "        pos(0., height),\n",
    "        pos(x, height),\n",
    "        pos(x, 0),\n",
    "        pos(0., 0), # ignore\n",
    "        # splits\n",
    "    ]\n",
    "    \n",
    "    codes = [\n",
    "        # border\n",
    "        Path.MOVETO,\n",
    "        Path.LINETO,\n",
    "        Path.LINETO,\n",
    "        Path.LINETO,\n",
    "        Path.CLOSEPOLY,\n",
    "    ]\n",
    "\n",
    "    for i in range(1, x):        \n",
    "        verts.append(pos(i, height))\n",
    "        verts.append(pos(i, 0))\n",
    "        codes.append(Path.MOVETO)\n",
    "        codes.append(Path.LINETO)\n",
    "\n",
    "    path = Path(verts, codes)\n",
    "    patch = patches.PathPatch(path, facecolor='white', lw=1)\n",
    "    ax.add_patch(patch)\n",
    "    ax.set_xlim(-0.2, x + 0.2)\n",
    "    ax.set_ylim(scale * (y - 1), scale * 2)\n",
    "\n",
    "    for ix in range(x):\n",
    "        ax.text(pos_x(0.1 + ix), pos_y(0.1), a[ix])\n",
    "\n",
    "    if top_label is not None:\n",
    "        ix, txt = top_label\n",
    "        ax.text(pos_x(ix), pos_y(1.1), txt, color='green')\n",
    "\n",
    "    if bottom_label is not None:\n",
    "        ix, txt = bottom_label\n",
    "        ax.text(pos_x(ix), pos_y(-0.5), txt, color='red')\n",
    "\n",
    "\n",
    "def get_next_proc(s):\n",
    "    def verbose(a, j = None, k= None, end='\\n'):\n",
    "      if j is not None:\n",
    "          print(\"\\033[32m%sj=%d\\033[0m\" % (\"\" if j < 1 else \"\\t\" * j, j))\n",
    "      for i in range(len(a)):\n",
    "          print(\"%s\\t\" % a[i], end='')\n",
    "      if k is not None:\n",
    "          print(\"\\n\\033[31m%sk=%d\\033[0m\" % (\"\" if k < 1 else \"\\t\" * k, k), end = end)\n",
    "    \n",
    "    next = [0 for ele in s]\n",
    "    next[0] = -1\n",
    "    # 对这个字符串维护两个指针，j不断向前，k在前面找匹配的\n",
    "    j = 0\n",
    "    k = -1\n",
    "    \n",
    "    # verbose(s, end='')\n",
    "        \n",
    "    loop = 0\n",
    "    scale = 0.6\n",
    "    draw_array(ax, s, scale=scale)\n",
    "    while j < len(s) - 1:\n",
    "      loop -= 1\n",
    "      # j = -1 第一个字符它的 next 值肯定是0的，所以直接跳过\n",
    "      # 如果j向后移动的时候找到了一个相同的字符\n",
    "      if k == -1 or s[j] == s[k]:\n",
    "          # j在前端，k在后端，如果两端的字符开始一致了，则带着k一起向前\n",
    "          j += 1\n",
    "          k += 1\n",
    "          next[j] = k\n",
    "          # verbose(next, j, k)\n",
    "          draw_array(ax, next, top_label=[j, \"j=%d\" % j], bottom_label=[k, \"k=%d\" % k], y=loop*2, scale=scale)\n",
    "          print()\n",
    "      else:\n",
    "          # 如果字符开始不匹配了，后端的k需要返回\n",
    "          k = next[k]\n",
    "          # verbose(next, j, k, end='')\n",
    "          # print(\"  ==> j未动，k移动到%d\" % k)\n",
    "          draw_array(ax, next, top_label=[j, \"j=%d\" % j], bottom_label=[k, \"k=%d j未动，k移动到%d\" % (k,k)], y=loop*2, scale=scale)\n",
    "    ax.figure.set_figheight(-loop * scale)\n",
    "    \n",
    "    return next\n",
    "\n",
    "plt.rcParams['font.sans-serif']=['HarmonyOS Sans SC']\n",
    "# plt.figure(dpi=30)\n",
    "fig, ax = plt.subplots()\n",
    "ax.set(xlabel=None)\n",
    "ax.set(ylabel=None)\n",
    "ax.axis('off')\n",
    "plt.xticks([])\n",
    "plt.yticks([])\n",
    "\n",
    "get_next_proc(\"abcdabdf\")\n",
    "\n",
    "# plt.show()\n",
    "plt.savefig('temp.png')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
